查看原文
其他

EXPLAIN都讲不清楚?恕我难以让你面试通过啊兄弟!

高广超 Bella的技术轮子 2022-09-01

这是Bella酱的第 82 期分享


作者 | 高广超

来源|https://4m.cn/p3zJT


MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,本文主要讲解explain命令的使用及相关参数说明。


EXPLAIN Output Columns



id


id是用来顺序标识整个查询中SELELCT 语句的,在嵌套查询中id越大的语句越先执行。该值可能为NULL,如果这一行用来说明的是其他行的联合结果。


select_type


表示查询的类型



table


对应行正在访问哪一个表,表名或者别名


  • 关联优化器会为查询选择关联顺序,左侧深度优先


  • 当from中有子查询的时候,表名是derivedN的形式,N指向子查询,也就是explain结果中的下一列


  • 当有union result的时候,表名是union 1,2等的形式,1,2表示参与union的query id


注意:MySQL对待这些表和普通表一样,但是这些“临时表”是没有任何索引的。


type


type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:


system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL ,一般来说,得保证查询至少达到range级别,最好能达到ref。



possible_keys


显示查询使用了哪些索引,表示该索引可以进行高效地查找,但是列出来的索引对于后续优化过程可能是没有用的


key


key列显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。


key_len


key_len列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好 。


ref


ref列显示使用哪个列或常数与key一起从表中选择行。


rows


rows列显示MySQL认为它执行查询时必须检查的行数。注意这是一个预估值。


Extra


Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。



-END-


更多精彩文章

1. 在阿里当PM都需要做什么?Bella酱亲身经历告诉你!

2. 我是怎么进阿里实习的

3. 一文聊透负载均衡神器 LVS、Nginx、HAProxy的工作原理

4. 万字长文讲解如何优化MySQL,建议收藏!

5. 11张图和源码带你解析Spring Bean的生命周期,建议收藏~!

6. CPU缓存了解下?


更多系列文章请查看公众号底部菜单栏【系列文章】,快捷获取Java后端、计算机基础、系统架构、大数据、面试等系列文章~


团队招人,欢迎一起来做同事呀~今天就想发个红包~顺便帮团队招人~风里雨里,我在阿里等你,来和我一起做同事吧!


如果你喜欢本文

请长按二维码,关注 Bella的技术轮子

转发至 朋友圈,是对我最大的支持

喜欢就点个在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存